﻿using System;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using ExcellentProject.Dominio.Cuestionarios.Repositorios;
using ExcellentProject.Dominio.Cuestionarios.Entidades;
using ExcellentProject.Infraestructura.AccesoDatos.Cuestionarios;
using System.Transactions;

namespace RepositorioCuestionarioUnitTestProject
{
    [TestClass]
    public class PruebaUnitariaRepositorioCuestionario
    {
        [TestMethod]
        public void CreacionRepositorio()
        {
            var repositorio = new RepositorioCuestionario();
        }

        [TestMethod]
        public void PruebaAgregarCuestionario()
        {
            var repositorio = new RepositorioCuestionario();
            repositorio.Contexto = new CuestionariosContext();
            var cuestionario = new Cuestionario()
            {
                IdDocente = 0,
                NumeroPreguntas = 2,
                FechaCreacion = DateTime.Now,
                Estado = "ACTIVO",
                Descripcion = "Cuestionario Prueba",
                CalificacionMaxima = 10,
                CalificacionMinima = 7,
                CodigoArea = "ING"
            };

            repositorio.Agregar(cuestionario);
        }

        [TestMethod]
        public void PruebaAgregarCuestionarioaBase()
        {
            var repositorio = new RepositorioCuestionario();
            repositorio.Contexto = new CuestionariosContext();
            var cuestionario = new Cuestionario()
            {
                IdDocente = 0,
                NumeroPreguntas = 2,
                FechaCreacion = DateTime.Now,
                Estado = "ACTIVO",
                Descripcion = "Cuestionario Prueba",
                CalificacionMaxima = 10,
                CalificacionMinima = 7,
                CodigoArea = "ING"
            };

            repositorio.Agregar(cuestionario);
            repositorio.ConfirmarCambios();
        }
        [TestMethod]
        public void PruebaBuscarCuestionario()
        {
            var repositorio = new RepositorioCuestionario();
            repositorio.Contexto = new CuestionariosContext();
            int numero = repositorio.Buscar(p => p.Estado == "ACTIVO").Count();
            Assert.AreEqual(numero, 1);
        }

        [TestMethod]
        public void PruebaModificarCuestionario()
        {
            var repositorio = new RepositorioCuestionario();
            repositorio.Contexto = new CuestionariosContext();
            var resultadoBusqueda = repositorio.Buscar(p => p.Estado == "ACTIVO").FirstOrDefault();
            if (resultadoBusqueda != null)
            {
                resultadoBusqueda.Estado = "CANCELADO";
                resultadoBusqueda.CalificacionMaxima = 100;
                repositorio.Modificar(resultadoBusqueda);
                repositorio.ConfirmarCambios();
            }

        }
        [TestMethod]
        public void PruebaEliminarCuestionario()
        {
            var repositorio = new RepositorioCuestionario();
            repositorio.Contexto = new CuestionariosContext();
            var resultadoBusqueda = repositorio.Buscar(p => p.Estado == "CANCELADO").FirstOrDefault();
            if (resultadoBusqueda != null)
            {
                repositorio.Eliminar(resultadoBusqueda);
            }
            repositorio.ConfirmarCambios();

        }


        [TestMethod]
        public void PruebaFallaTransaccional()
        {
            var repositorio = new RepositorioCuestionario();
            repositorio.Contexto = new CuestionariosContext();
            using (var transaccion = new TransactionScope())
            {
                var cuestionario = new Cuestionario()
                {
                    IdDocente = 0,
                    NumeroPreguntas = 10,
                    FechaCreacion = DateTime.Now,
                    Estado = "ACTIVO",
                    Descripcion = "Cuestionario Prueba 1",
                    CalificacionMaxima = 10,
                    CalificacionMinima = 7,
                    CodigoArea = "LEN"
                };

                repositorio.Agregar(cuestionario);
                repositorio.ConfirmarCambios();

                var cuestionario2 = new Cuestionario()
                {
                    IdCuestionario = 4,
                    IdDocente = 0,
                    NumeroPreguntas = 10,
                    FechaCreacion = DateTime.Now,
                    Estado = "ACTIVO",
                    Descripcion = "Cuestionario Prueba 2",
                    CalificacionMaxima = 10,
                    CalificacionMinima = 7,
                    CodigoArea = "LEN"
                };

                throw new Exception("EXCEPCION INTENCIONAL");

                repositorio.Agregar(cuestionario);
                repositorio.ConfirmarCambios();

                transaccion.Complete();
            }
        }


    }
}
